# 带参数的外层装饰器：返回一个装饰器函数
def decorator_Outside(inString):
    print(f"02: 进入外层装饰器{inString}, 即将定义内层装饰器{inString}")

    # 实际的装饰器函数，接受被装饰的函数（inFunc）作为参数
    def decorator_Inside(inFunc):
        print(f"04: 进入内层装饰器{inString}, 即将定义wrapper {inString}")

        # 包装函数，增强原始函数的功能
        def wrapper(*args, **kwargs):
            print(f"8: 进入wrapper {inString}, 即将实现装饰")

            result = (
                "<" + inString + ">" + inFunc(*args, **kwargs) + "</" + inString + ">"
            )
            print(f"09: {inString}临时打印组装后的结果: {result}")
            return result

        print(f"05: wrapper {inString} 完成定义")
        return wrapper

    print(f"03: 内层装饰器{inString} 完成定义")
    return decorator_Inside


print("01: 完成定义共用的外层装饰器; 即将开始装饰基函数")


@decorator_Outside("b")
@decorator_Outside("a")
def 基方法(inString):
    print(f"10: 进入基方法, 即将返回{inString}")

    return inString


print("06: 基方法完成装饰, 即将调用被装饰过的基方法, 并赋值给变量c")
c = 基方法("Hello, World!")
print("11: 基方法完成调用,并已赋值给变量c")
print("12: 即将打印变量c")
print(c)
